package com.Algorithm.leetcode.Study;

import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zjz
 * @Date: 2021/10/12/15:43
 * @Description: 给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 *
 * 示例:
 *
 * 输入: [0,1,0,3,12]
 * 输出: [1,3,12,0,0]
 * 说明:
 *
 * 必须在原数组上操作，不能拷贝额外的数组。
 * 尽量减少操作次数。
 *
 * 作者：力扣 (LeetCode)
 * 链接：https://leetcode-cn.com/leetbook/read/all-about-array/x9rh8e/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 * @Target: 移动零
 */
public class 移动零 {

    // 想法:使用p指针指向左边,一个指针i跑数组,如果是0,p++,i++
    public static void main(String[] args) {

        int arr1[]  = new int[]{0,1,0,3,12};
        // 采用一个指针指有效的,一个指针跑
        int p = 0;
        int i = 0;
        while (i<arr1.length){   // 整个数组走
            if(arr1[i]!=0){    // 不等于0 p，i走
                arr1[p++]=arr1[i++];
            }else if (arr1[i]==0){  // 等于0 i++
                i++;
            }
        }
        while (p<arr1.length){
            arr1[p++]=0;
        }


        for (int i1 : arr1) {
            System.out.print(i1+" ");
        }
















/*

        int arr[]  = new int[]{0,0,1};

        // 先使用冒泡冒上去
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]==0){
            for (int j = i; j < arr.length-1; j++) {
                    swap(arr,j,j+1);
                }
            }
        }

        for (int i : arr) {
            System.out.print(i+" ");
        }

*/

    }

    public static void swap(int arr[] ,int a,int b){
        int m = arr[a];
        arr[a] = arr[b];
        arr[b] = m;
    }



}
